<?php
// Тестируем mysql

function atest_mod_sharpobj_func_simplemysql()
{   // Тестируем работу связку работы с базой
	$start = microtime(true);
    $ok = true;
    echo '<pre>';
	// Создаем формат базы
	$format = new sharpobj_storage_format();
	$format->addItem('a','a_int','int');
	$format->addItem('b','b_str','string');
	// Создаем экземпляр контейнера
	$dataobj1 = $format->getObj();
	// Устанавливаем данные
	$dataobj1->set('plain',array('a'=>123,'b'=>'rrr"ttt'));
	// Создаем объект доступа к таблице
	$DB_t1 = new sharpobj_storage_simplemysql($format,
			array('tbname'=>'atest_sharpobj_t1','idfield'=>'id'));
	// Подключаемся к базе
	// $mysql_conn = mysql_connect('localhost','root','');
	// mysql_select_db('my-site-srv',$mysql_conn);
	// $DB_t1->setConnection($mysql_conn);
	// Вставляем данные в таблицу
	$id = $DB_t1->insert($dataobj1);
	if (!($id instanceof sharpobj_data_item_int) or $id->get('plain')<1)
	{
        echo "\nПри добавлении в базу не возвращается id\n";
        print_r($id);
        $ok = false;	
	}
	// Запрашиваем только что добавленное поле из таблицы
	$dataobj2 = $DB_t1->get($id);
	// Проверяем правильность добавления
	if ($dataobj2->getId()!=$id->get('plain') 
		OR $dataobj2->get('plain','a')!=$dataobj1->get('plain','a')
		OR $dataobj2->get('plain','b')!=$dataobj1->get('plain','b'))
	{
        echo "\nДобавленный в базу и полученный объекты не совпадают\n";
		print_r($dataobj1);
		print_r($dataobj2);
		$ok = false;
	}
	// Проверяем правильность обновления
	$DB_t1->update($dataobj2,null,false);
	echo "\n";
	$dataobj2->clear('a');
	// print_r($dataobj2);
	$DB_t1->update($dataobj2,null,false);
	$DB_t1->update($dataobj2,null,true);
	// Проверяем удаление
	$id = $dataobj2->getIdObj();
	$DB_t1->delete($id);
	if ($DB_t1->get($id))
	{
		// Не удалилось
        echo "\nУдаление записи не произошло\n";
		$ok = false;
	}
	// Проверяем работу со списками
	$list = $DB_t1->sqlqueryList("SELECT #!id#,a_int from #!table# LIMIT 10");
	foreach($list as $dataobj3)
	{
		// echo "\n".$dataobj3->getId();
		// echo "\n".$dataobj3->get('html','a');
		// echo "\n".$dataobj3->get('html','b');
	}
	// print_r($list);
	// echo $format->getColNames();
	// echo $format->getColVals($dataobj1,'plain');
	// Считаем, сколько заняло исполнение
	echo "\n".round(microtime(true) - $start,4);
    echo '</pre>';
    return $ok;
}
function atest_mod_sharpobj_func_mysql_create()
{   // Тестируем код создания БД
	$start = microtime(true);
    $ok = true;
    echo '<pre>';
	// Создаем формат базы
	$format = new sharpobj_storage_format();
	$format->setComment('aaa');
	$format->addItem('a','a_int','int');
	$format->addItem('b','b_str','string');
	$format->addItem('c','c_int','int',array('null'=>false,'len_max'=>4),1,'ccc');
	$format->addItem('d','d_str','string',array('null'=>false,'len_max'=>20),2);
	$format->addItem('e','e_row','row',array('null'=>true,'len_max'=>400),3);
	$format->addItem('f','f_email','row',array('null'=>true,'len_max'=>40),4);
	$format->addItem('g','g_float','float',array('null'=>true),5);
	$format->addItem('h','h_double','float',array('null'=>true),6);
	
	$format->addIndex('c','unique','c_int',1,'qq1');
	$format->addIndex('a','not_unique','a_int',2,'qq2');
	$format->addIndex('d_g','unique',array('d_str','f_email'),3,'qq2');

	$DB_t1 = new sharpobj_storage_simplemysql($format,
			array('tbname'=>'atest_sharpobj_t3','idfield'=>'id1'));

	if ($DB_t1->sqlDBCreate()!=='CREATE TABLE `atest_sharpobj_t3`
(
`id1` int(11) NOT NULL auto_increment,
`a_int` int(11) default NULL,
`b_str` varchar(255) collate utf8_unicode_ci default NULL,
`c_int` int(4) NOT NULL COMMENT \'ccc\',
`d_str` varchar(20) collate utf8_unicode_ci NOT NULL,
`e_row` TEXT default NULL,
`f_email` varchar(40) collate utf8_unicode_ci default NULL,
`g_float` double default NULL,
`h_double` double default NULL,
PRIMARY KEY (`id1`),
UNIQUE KEY `c` (`c_int`),
KEY `a` (`a_int`),
UNIQUE KEY `d_g` (`d_str`,`f_email`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
COMMENT=\'aaa\';')
	{
		$ok = false;
		echo "\nМетод sqlDBCreate() вернул неправильный дамп базы данных \n";
		echo $DB_t1->sqlDBCreate()."\n";
	}
	$DB_t1->createTable();
	$DB_t1->dropTable();
	// echo "\n".serialize($format);
	// Считаем, сколько заняло исполнение
	echo "\n".round(microtime(true) - $start,4);
    echo '</pre>';
    return $ok;
}
?>